题目
Sum all the numbers of the array (in F# and Haskell you get a list) except the highest and the lowest element (the value, not the index!).
(The highest/lowest element is respectively only one element at each edge, even if there are more than one with the same value!)
Example:1
2{ 6, 2, 1, 8, 10 } => 16
{ 1, 1, 11, 2, 3 } => 6
If array is empty, null or None, or if only 1 Element exists, return 0.
Note:In C++ instead null an empty vector is used. In C there is no null. ;-)
思路
首先想到的就是对list
进行排序,然后剔除最大值和最小值,最后求和。
另外,可以结合之前在python cookbook
中看到的list
中分解元素的方法。
答案
我的答案
1 | def sum_array(arr): |
最佳答案
1 | def sum_array(arr): |
1 | def sum_array(arr): |
最佳答案中结合使用了list的各种方法,答案一中使用了sum()
、min()
、max()
方法,而无需再进行排序操作,另外第二个答案巧妙地使用了[1:-1]
来对排序后的结果进行切片,但是都需要考虑入参是None
的情况。
知识点
list.sort()和sorted()
sort()
与sorted()
的不同在于,sort()
是在原位重新排列列表,而sorted()
是产生一个新的列表,也就是说sorted()
函数有一个copy的过程,这样多少会带来性能的损耗。另外二者的使用方法也有不同。
描述
sort()
函数用于对原列表进行排序,如果指定参数,则使用比较函数指定的比较函数。需要注意的是该方法没有返回值,但是会对列表的对象进行排序。因此当直接print(arr.sort())
时得到了一个None
。1
2
32,334,12,4,6] a = [
print(a.sort())
None
sorted()
函数对所有可迭代的对象进行排序操作。会返回重新排序的列表。1
2
32,334,12,4,6] a = [
print(sorted(a))
[2, 4, 6, 12, 334]
语法
list.sort([func])
- func – 可选参数, 如果指定了该参数会使用该参数的方法进行排序。
sorted(iterable[, cmp[, key[, reverse]]])
- iterable – 可迭代对象。
- cmp – 比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。
- key – 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
- reverse – 排序规则,
reverse = True
降序 ,reverse = False
升序(默认)。
示例
1 | 2,334,12,4,6] a = [ |